
#include <stm32f10x.h>
#include <stdbool.h>
#include <stdio.h>

static unsigned char code_table[] = {
	0xc0, // 0
	0xf9, // 1
	0xa4, // 2
	0xb0, // 3
	0x99, // 4
	0x92, // 5
	0x82, // 6
	0xf8, // 7
	0x80, // 8
	0x90, // 9
	0x88, // A
	0x83, // B
	0xc6, // C
	0xa1, // D
	0x86, // E
	0x8e, // F
	0x8c, // P
	0xc1, // U
	0x91, // Y
	0x7c, // L
	0x00, // ȫ��
	0xff  // Ϩ��
};

void delay_ms(unsigned int ms)
{
	int i = 0;
	while (ms--)
	{
		for (i = 0; i < 1000; i++)
			;
	}
}

void init_gpio_a_b()
{
	GPIO_InitTypeDef def;

	def.GPIO_Mode = GPIO_Mode_Out_PP;
	def.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;
	def.GPIO_Speed = GPIO_Speed_50MHz;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);

	GPIO_Init(GPIOA, &def);

	def.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
	GPIO_Init(GPIOB, &def);
}

void show_1234()
{

	  
	GPIO_Write(GPIOB, 0x1);
	GPIO_Write(GPIOA, code_table[1]);
	delay_ms(10);
	GPIO_Write(GPIOB, 0);
	GPIO_Write(GPIOB, 0x2);
	GPIO_Write(GPIOA, code_table[2]);
	delay_ms(10);
	GPIO_Write(GPIOB, 0);
	GPIO_Write(GPIOB, 0x4);
	GPIO_Write(GPIOA, code_table[3]);
	delay_ms(10);
	GPIO_Write(GPIOB, 0);
	GPIO_Write(GPIOB, 0x8);
	GPIO_Write(GPIOA, code_table[4]);
	delay_ms(10);
	GPIO_Write(GPIOB, 0);
}


void show_any_4num(int num)
{

	  
	GPIO_Write(GPIOB, 0x1);
	GPIO_Write(GPIOA, code_table[num/1000%10]);
	delay_ms(10);
	GPIO_Write(GPIOB, 0);
	GPIO_Write(GPIOB, 0x2);
	GPIO_Write(GPIOA, code_table[num/100%10]);
	delay_ms(10);
	GPIO_Write(GPIOB, 0);
	GPIO_Write(GPIOB, 0x4);
	GPIO_Write(GPIOA, code_table[num/10%10]);
	delay_ms(10);
	GPIO_Write(GPIOB, 0);
	GPIO_Write(GPIOB, 0x8);
	GPIO_Write(GPIOA, code_table[num%10]);
	delay_ms(10);
	GPIO_Write(GPIOB, 0);
}


int main()
{

	printf("start display!");

	init_gpio_a_b();

	while (true)
	{
		//show_1234();
		show_any_4num(59876);
	}

	return 0;
}
